/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.consultorio.dao;

import br.com.consultorio.util.FabricaConexao;
import br.com.consultorio.bean.Endereco;
import br.com.consultorio.bean.Pessoa;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author L3nfers
 */
public class EnderecoDaoImp implements EnderecoDao {

    @Override
    public Object salvar(Object abj) throws Exception {
        return null;      
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Endereco endereco = (Endereco) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "UPDATE endereco SET rua=?, bairro=?, cidade=?, estado=?, cep=? WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, endereco.getRua());
            ps.setString(2, endereco.getBairro());
            ps.setString(3, endereco.getCidade());
            ps.setString(4, endereco.getEstado());
            ps.setString(5, endereco.getCep());
            ps.setInt(6, endereco.getId());
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados" + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "DELETE FROM endereco WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar excluir dados"
                    + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Endereco endereco = null;
        try {
            String SQL = "SELECT * FROM endereco WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                endereco = new Endereco();
                endereco.setId(id);
                endereco.setRua(rs.getString("rua"));
                endereco.setBairro(rs.getString("bairro"));
                endereco.setCidade(rs.getString("cidade"));
                endereco.setEstado(rs.getString("estado"));
                endereco.setCep(rs.getString("cep"));
            }
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados"
                    + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps, rs);
        }
        return endereco;
    }

    @Override
    public List<Object> listar() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs;
        Endereco endereco;
        List enderecos = new ArrayList();
        try {
            String SQL = "SELECT * FROM endereco";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            while (rs.next()) {
                endereco = new Endereco();
                endereco.setId(rs.getInt("id"));
                endereco.setRua(rs.getString("rua"));
                endereco.setBairro(rs.getString("bairro"));
                endereco.setCidade(rs.getString("cidade"));
                endereco.setEstado(rs.getString("estado"));
                enderecos.add(endereco);
            }
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados"
                    + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
        return enderecos;
    }

    @Override
    public void salvaEndereco(Object obj) throws Exception {
        Pessoa pessoa = (Pessoa) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        try {
            String SQL = "INSERT INTO endereco(rua, bairro, cidade, estado, cep) VALUES(?, ?, ?, ?, ?)";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setString(1, pessoa.getEndereco().getRua());
            ps.setString(2, pessoa.getEndereco().getBairro());
            ps.setString(3, pessoa.getEndereco().getCidade());
            ps.setString(4, pessoa.getEndereco().getEstado());
            ps.setString(5, pessoa.getEndereco().getCep());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            rs.next();
            pessoa.getEndereco().setId(rs.getInt(1));
            
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar salvar dados" + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public void alteraEndereco(Object obj) throws Exception {
        Pessoa pessoa = (Pessoa) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "UPDATE endereco SET rua=?, bairro=?, cidade=?, estado=?, cep=? WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, pessoa.getEndereco().getRua());
            ps.setString(2, pessoa.getEndereco().getBairro());
            ps.setString(3, pessoa.getEndereco().getCidade());
            ps.setString(4, pessoa.getEndereco().getEstado());
            ps.setString(5, pessoa.getEndereco().getCep());
            ps.setInt(6, pessoa.getEndereco().getId());
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados" + se.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }
}
